package org.haredot.utils;

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;

public class MD5Utils {

    /**
     * MD5 加密
     *    1. 不可逆
     *    2. 加密后的长度固定、是 32个字符
     *    3. 由 16 进制组成的 字符 （0123456789ABCDEF）
     * @param rawText   F (  1111 )
     * @return          1011 1111
     */
    public static String md5(String rawText) {
        //
        try {
            MessageDigest digest = MessageDigest.getInstance("MD5");
            // 将 明文 传入 digest 中
            digest.update(rawText.getBytes(StandardCharsets.UTF_8));
            // 获取 加密后的 密文， 每一位代表 2个字符
            byte[] bytes = digest.digest();

            StringBuilder sb = new StringBuilder();
            // 遍历 bytes 数组、将每一位 转成 最多2个字符、如果字符数 < 2,  则前面补 0
            for(byte b : bytes) {
                String s = Integer.toHexString(b & 0XFF);
                if (s.length() == 1) {
                    sb.append("0");
                }
                sb.append(s);
            }
            return sb.toString() ;
        } catch (NoSuchAlgorithmException e) {
            throw new IllegalStateException("不支持 md5") ;
        }
    }

    public static void main(String[] args) {
        System.out.println(md5("admin"));
    }
}
